package com.crm.api.mapper;

import com.crm.api.entity.BusinessType;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 业务类型数据访问接口
 */
@Mapper
public interface BusinessTypeMapper {

    /**
     * 查询业务类型列表（支持分页和筛选）
     */
    List<BusinessType> findBusinessTypes(Map<String, Object> params);

    /**
     * 统计业务类型数量
     */
    Integer countBusinessTypes(Map<String, Object> params);

    /**
     * 查询所有启用的业务类型
     */
    List<BusinessType> findActiveBusinessTypes();

    /**
     * 根据ID查询业务类型
     */
    BusinessType findById(Integer id);

    /**
     * 插入业务类型
     */
    void insert(BusinessType businessType);

    /**
     * 更新业务类型
     */
    void update(BusinessType businessType);

    /**
     * 根据ID删除业务类型
     */
    void deleteById(Integer id);

    /**
     * 更新业务类型状态
     */
    void updateStatus(@Param("id") Integer id, 
                     @Param("isActive") Boolean isActive, 
                     @Param("updatedAt") Date updatedAt);

    /**
     * 检查类型名称是否已存在
     */
    Integer existsByTypeName(@Param("typeName") String typeName);

    /**
     * 检查类型名称是否已被其他记录使用
     */
    Integer existsByTypeNameAndNotId(@Param("typeName") String typeName, @Param("id") Integer id);

    /**
     * 统计关联的业务数量
     */
    Integer countRelatedBusinesses(@Param("id") Integer id);
}